﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;

namespace GestionaleLib.Controller
{
    public class ctrlTaglie
    {
        #region "Testata"
        #region "Proprietà"
        private Connector Connessione;
        #endregion
        public enum Insert
        {
            Successo,
            Errore
        }
        public enum Edit
        {
            Successo,
            Errore
        }
        public enum Delete
        {
            Successo,
            Errore
        }
        #endregion

        public ctrlTaglie()
        {
            Connessione = Connector.Istance();
        }

        /// <summary>
        /// Inserisce una nuova Taglia
        /// </summary>
        /// <param name="Taglia"></param>
        /// <returns></returns>
        public Insert Nuovo(Taglia Taglia)
        {
            try
            {
                string sql = @"
                    INSERT INTO Taglia VALUES(@Id,@Descrizione)
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Taglia.Id);
                cmd.Parameters.AddWithValue("@Descrizione", Taglia.Descrizione);
                cmd.ExecuteNonQuery();
                return Insert.Successo;
            }
            catch
            {
                throw new ExceptionErroreInserimento();
            }
        }
        /// <summary>
        /// Modifica una determinata taglia tramite id
        /// </summary>
        /// <param name="Taglia"></param>
        /// <returns></returns>
        public Edit Modifica(Taglia Taglia)
        {
            try
            {
                string sql = @"
                    UPDATE Taglia SET Descrizione=@Descrizione 
                        WHERE Id=@Id
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Taglia.Id);
                cmd.Parameters.AddWithValue("@Descrizione", Taglia.Descrizione);
                cmd.ExecuteNonQuery();
                return Edit.Successo;
            }
            catch
            {
                throw new ExceptionErroreModifica();
            }
        }
        /// <summary>
        /// Cancella una taglia
        /// </summary>
        /// <param name="Taglia"></param>
        /// <returns></returns>
        public Delete Cancella(Taglia Taglia)
        {
            try
            {
                string sql = @"
                    DELETE FROM Taglia
                        WHERE Id=@Id
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Taglia.Id);
                cmd.ExecuteNonQuery();
                return Delete.Successo;
            }
            catch
            {
                throw new ExceptionErroreCancellazione();
            }
        }
        /// <summary>
        /// Seleziona tutte le taglie presenti nel db tramite like descrizione
        /// </summary>
        /// <returns></returns>
        public List<Taglia> Seleziona(string Valore)
        {
            string sql = @"
                SELECT * FROM Taglia WHERE Descrizione LIKE '%" + Valore + "%' ORDER BY Descrizione ASC";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<Taglia> ListaRitorno = new List<Taglia>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    Taglia TagliaRitorno = new Taglia();
                    TagliaRitorno.Id = (Guid)item["Id"];
                    TagliaRitorno.Descrizione = item["Descrizione"].ToString();
                    ListaRitorno.Add(TagliaRitorno);
                }
                return ListaRitorno;
            }
            return null;
        }
        /// <summary>
        /// Seleziona tutte le taglie presenti nel db
        /// </summary>
        /// <returns></returns>
        public List<Taglia> Seleziona()
        {
            string sql = @"
                SELECT * FROM Taglia  
                    ORDER BY Descrizione ASC 
            ";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<Taglia> ListaRitorno = new List<Taglia>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    Taglia TagliaRitorno = new Taglia();
                    TagliaRitorno.Id = (Guid)item["Id"];
                    TagliaRitorno.Descrizione = item["Descrizione"].ToString();
                    ListaRitorno.Add(TagliaRitorno);
                }
                return ListaRitorno;
            }
            return null;
        }
        /// <summary>
        /// Seleziona una taglia tramite ID
        /// </summary>
        /// <param name="IdTaglia"></param>
        /// <returns></returns>
        public Taglia Seleziona(Guid IdTaglia)
        {
            string sql = @"
                SELECT * FROM Taglia 
                    WHERE Id='" + IdTaglia + "'";

            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                Taglia TagliaRitorno = new Taglia();
                TagliaRitorno.Id = (Guid)dt.Rows[0]["Id"];
                TagliaRitorno.Descrizione = dt.Rows[0]["Descrizione"].ToString();
                return TagliaRitorno;
            }
            return null;
        }
    }
}
